import gradio as gr
import numpy as np
from PIL import Image
import joblib

# 加载最佳模型
best_model = joblib.load('best_model.pkl')

# 预处理函数，将图片转换为模型输入格式
def preprocess_image(image):
    # 这里应该是将图片转换成模型输入的代码
    image = image.resize((224, 224))  # 假设模型需要224x224的输入
    image_array = np.array(image)
    return image_array.flatten()

# 逆向标签编码函数，将模型输出转换回原始标签
def inverse_label(prediction):
    # 这里应该是将预测结果转换回原始标签的代码
    labels = ['cat', 'dog']  # 假设有两个类别：猫和狗
    return labels[prediction]

# 定义预测函数
def predict(image):
    # 预处理图像
    processed_image = preprocess_image(image)
    
    # 使用最佳模型进行预测
    prediction = best_model.predict(processed_image.reshape(1, -1))
    
    # 将预测结果解码回原始标签
    predicted_label = inverse_label(prediction[0])
    
    return predicted_label

# 创建 Gradio 界面
iface = gr.Interface(
    fn=predict,
    inputs=gr.Image(),
    outputs=gr.Label(num_top_classes=1),
    title="猫狗分类",
    description="上传一张猫或狗的图片，看看模型是否能正确分类。"
)

# 启动界面
iface.launch()